package com.heima.user.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.common.exception.CustomException;
import com.heima.model.common.enums.AppHttpCodeEnum;
import com.heima.model.user.pojos.ApUser;
import com.heima.model.user.vo.ApUserLoginSuccessVO;
import com.heima.user.mapper.ApUserMapper;
import com.heima.user.service.ApUserService;
import java.nio.charset.StandardCharsets;
import java.util.Objects;

import com.heima.utils.common.AppJwtUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;


@Service
public class ApUserServiceImpl extends ServiceImpl<ApUserMapper, ApUser> implements ApUserService {
    @Override
    public ApUserLoginSuccessVO login(ApUser apUser) {

        if (StringUtils.isNoneBlank(apUser.getPhone(), apUser.getPassword())){
            //todo 用户登录
            baseMapper.selectOne(Wrappers.lambdaQuery(ApUser.class).eq(ApUser::getPhone, apUser.getPhone()));
            ApUser apUserByPhone = baseMapper
                    .selectOne(Wrappers
                            .lambdaQuery(ApUser.class)
                            .eq(ApUser::getPhone, apUser.getPhone()));
            if (Objects.isNull(apUserByPhone)){
                throw new CustomException(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST);
            }
            String newPass = apUser.getPassword() + apUserByPhone.getSalt();
            String digestAsHex = DigestUtils.md5DigestAsHex(newPass.getBytes());//加密
            if(!StringUtils.equals(digestAsHex, apUserByPhone.getPassword())){
                throw new CustomException(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
            }
            ApUserLoginSuccessVO apUserLoginSuccessVO = new ApUserLoginSuccessVO();
            String token = AppJwtUtil.generateToken(apUserByPhone.getId().longValue());
            apUserLoginSuccessVO.setToken(token);
            apUserLoginSuccessVO.setUser(apUserByPhone);
            return apUserLoginSuccessVO;
        }else {
            //todo 游客登录
            ApUserLoginSuccessVO apUserLoginSuccessVO = new ApUserLoginSuccessVO();
            String token = AppJwtUtil.generateToken(0L);
            apUserLoginSuccessVO.setToken(token);
            return apUserLoginSuccessVO;
        }
//        if (StringUtils.isNoneBlank(apUser.getPhone(), apUser.getPassword())) {
//            //todo 用户登录
//            ApUser apUserByPhone = baseMapper.selectOne(Wrappers.lambdaQuery(ApUser.class).eq(ApUser::getPhone, apUser.getPhone()));
//            if (Objects.isNull(apUserByPhone)){
//                throw new CustomException(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST);
//            }
//            //密码加密
//            String newPassword = apUser.getPassword() + apUserByPhone.getSalt();
//            String digestAsHex = DigestUtils.md5DigestAsHex(newPassword.getBytes());//md5加密
//            //加密后比较
//            if (!StringUtils.equals(digestAsHex, apUserByPhone.getPassword())){
//                throw new CustomException(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
//            }
//            ApUserLoginSuccessVO apUserLoginSuccessVO = new ApUserLoginSuccessVO();
//            String token = AppJwtUtil.generateToken(apUserByPhone.getId().longValue());
//            apUserLoginSuccessVO.setToken(token);
//            apUserLoginSuccessVO.setUser(apUserByPhone);
//            return apUserLoginSuccessVO;
//        } else {
//            //todo 游客登录
//            ApUserLoginSuccessVO apUserLoginSuccessVO = new ApUserLoginSuccessVO();
//            String token = AppJwtUtil.generateToken(0L);//游客给一个令牌即可
//            apUserLoginSuccessVO.setToken(token);
//            return apUserLoginSuccessVO;
//        }
    }
//    @Override
//    public ApUserLoginSuccessVO login(ApUser apUser) {
//        // 游客登录
//        if (StringUtils.isAnyEmpty(apUser.getPhone(), apUser.getPassword())) {
//            ApUserLoginSuccessVO apUserLoginSuccessVO = new ApUserLoginSuccessVO();
//            String token = AppJwtUtil.generateToken(0L);
//            apUserLoginSuccessVO.setToken(token);
//            return apUserLoginSuccessVO;
//        }
//        ApUser apUserByPhone = baseMapper.selectOne(
//                Wrappers.lambdaQuery(ApUser.class)
//                        .eq(ApUser::getPhone, apUser.getPhone())
//        );
//        if (Objects.isNull(apUserByPhone)) {
//            throw new CustomException(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST);
//        }
//        // 密码加盐校验
//        String pass = apUser.getPassword() + apUserByPhone.getSalt();
//        String digestAsHex = DigestUtils.md5DigestAsHex(pass.getBytes());
//        if (!StringUtils.equals(digestAsHex, apUserByPhone.getPassword())) {
//            throw new CustomException(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
//        }
//        ApUserLoginSuccessVO apUserLoginSuccessVO = new ApUserLoginSuccessVO();
//        String token = AppJwtUtil.generateToken(apUserByPhone.getId().longValue());
//        apUserLoginSuccessVO.setToken(token);
//        apUserLoginSuccessVO.setUser(apUserByPhone);
//        return apUserLoginSuccessVO;
//    }
}
